// 云函数入口文件
const cloud = require('wx-server-sdk')
const MAX_LIMIT = 100
cloud.init()
const TcbRouter = require('tcb-router')
const db = cloud.database({
  env: 'test-767203960-6g9qt175a903732b'
})
const blogCollection = db.collection('blog')
// 云函数入口函数
exports.main = async (event, context) => {
  const app = new TcbRouter({
    event
  })
  app.router('list', async (ctx, next) => {
    const key = event.keyword
    let w = {}
    if (key.trim() != '') {
      w = {
        content: db.RegExp({
          regexp: key,
          options: 'i'
        })
      }
    }

    let bloglist = await blogCollection.where(w).skip(event.start).limit(event.count).orderBy('createTime', 'desc').get().then((res) => {
      return res.data
    })
    ctx.body = bloglist
  })

  app.router('detail', async (ctx, next) => {
    let blogId = event.blogId
    //详情查询
    let detail = await blogCollection.where({
      _id: blogId
    }).get().then((res) => {
      return res.data
    })

    const countResult = await blogCollection.count()
    const total = countResult.total //因为countResult为对型，要通过.total把他变成number型
    let commentList = {
      data: []
    }
    if (total > 0) {
      const batchTimes = Math.ceil(total / MAX_LIMIT)
      const task = []
      for (let i = 0; i < batchTimes; i++) {
        let promise = db.collection('blog-comment').skip(i * MAX_LIMIT).limit(MAX_LIMIT)
          .where({
            blogId
          }).orderBy('createTime', 'desc').get()
        task.push(promise)
      }
      if (task.length > 0) {
        commentList =
          (await Promise.all(task)).reduce((acc, cur) => {
            return {
              data: acc.data.concat(cur.data)
            }
          })
      }
    }
    ctx.body = {
      commentList,
      detail,
    }
  })
  const wxContext = cloud.getWXContext()
  app.router('getListByOpenid',async(ctx,next)=>{
  ctx.body =  blogCollection.where({
      _openid:wxContext.OPENID
    }).skip(event.start).limit(event.count).orderBy('createTime','desc').get().then((res)=>{
      return res.data
    })
  })


  return app.serve()
}